# -*- coding: utf-8 -*-
# @Time    : 2024/6/28 17:50
# @Author  : yujiahao
# @File    : 03_numpy_broadcast.py
# @description:NumPy广播机制
import numpy as np

# NumPy 中的广播机制（Broadcast）旨在解决不同形状数组之间的算术运算问题。
# 我们知道，如果进行运算的两个数组形状完全相同，它们直接可以做相应的运算。

a = np.array([0.1, 0.2, 0.3, 0.4])
b = np.array([10, 20, 30, 40])
c = a * b
print(c)

print('''\n-----------------------------------☆☆☆分割线☆☆☆----------------------------------------\n''')

"""


当进行运算的两个数组形状不同，Numpy 会自动触发广播机制。
为了保持数组形状相同，NumPy 设计了一种广播机制，这种机制的核心是对形状较小的数组，在横向或纵向上进行一定次数的重复，使其与形状较大的数组拥有相同的维度。
 

图示：通过数组 a、b 的运算展示了广播机制的实现流程。

    a (4 x 3)           b (3)            result (4 x 3)
    [[ 0  0  0]       + [ 0  1  2]    =  [[ 0  1  2]
     [10 10 10]         [ 0  1  2]       [10 11 12]
     [20 20 20]         [ 0  1  2]       [20 21 22]
     [30 30 30]]        [ 0  1  2]]      [30 31 32]]

            图1：Numpy 数组广播机制

4x3 的二维 a 数组与 1x3 的一维 b 数组相加，本质上可以理解为 b 数组在纵向上向下拓展 3 次（将第一行重复 3 次），
从而生成与 a 数组相同形状的数组，之后再与 a 数组进行运算,没啥滑头，看图就好了。
"""

a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
# b数组与a数组形状不同
b = np.array([1, 2, 3])
print(a + b)
